﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using OpGen.Extensions.Network;

namespace OpGen.Extensions.Runtime.Client
{
    /// <summary>
    /// Stellt die Grundfunktionalität zum weiterleiten der OpCode Nachichten bereit
    /// </summary>
    public abstract class ClientMessageMethodInvoker : ClientMessageHandler
    {
        /// <summary>
        /// Ruft die Methode auf, dessen OpCode, registriert ist
        /// </summary>
        /// <param name="data">Die empfangenen Daten</param>
        public virtual void HandleMessage( byte[] data)
        {
            Invoke( data);
        }

        /// <summary>
        /// Ruft die Methode auf, dessen OpCode, registriert ist
        /// </summary>
        /// <param name="data">Die empfangenen Daten</param>
        protected virtual void Invoke( byte[] data)
        {
            var opCode = BitConverter.ToInt32(data, 0);
            var target = GetTarget(opCode);

            if (target == null) return;

            target.Invoke(data);
        }
    }
}
